#ifndef __JSONPARSER_H__
#define __JSONPARSER_H__
#include "JsonTypes.h"

namespace wj
{
class JSONParser
{
    struct Context
    {
        const char* json{nullptr};
        Context(const char* p) : json(p)
        {
        }
    };

  public:
    static RetCode Parse(JSONValue& v, const char* jsonStr);

  private:
    static void parseWhiteSpace(Context& c);
    static RetCode parseValue(Context& c, JSONValue& v);
    static RetCode parseLiteral(Context& c,
                                JSONValue& v,
                                const char* literal,
                                JSONType t);
    static RetCode parseNumber(Context& c, JSONValue& v);
    static RetCode parseString(Context& c, JSONValue& v);
};
}  // namespace wj

#endif  // __JSONPARSER_H__